Select های تو در تو :
می توان در درون يک دستور Select ، دستور Select ديگری را تعريف کرد . در اين حالت ابتدا دستور Select درونی اجرا شده و نتايج مورد نظر خود را که سطرهايی از جدول مربوط به آن هستند را استخراج کرده و آنرا به Select بيرونی انتقال می دهد . سپس Select بيرونی نيز اجرا شده و نتايج استخراجی خود را با استفاده از فيلد مشترک بين 2 جدول با سطرهای Select درونی پيوند زده و سطرهای مطابق با شروط تعيين شدهخ را نمايش می دهد .
از حالت Select های تو در تو برای پيوند جدول ها استفاده می شود و برای زمانی مناسب است که بخواهيم ستون های خروجی در دستور Select فقط از يک جدول که در بيرونی ترين Select تعريف شده اند ، نمايش داده شوند .
نکته : به تعداد دستورات Select تو در تو ، سطح آن می گويند .
Select های 2 سطحی :
در اين حالت يک دستور Select در درون دستور Select ديگری تعريف می شود و برای پيوند 2 جدول با استفاده از فيلد مشترک استفاده می شود . نتايج خروجی فقط می تواند شامل سطرهای از جدول Select بيرونی باشد .
شکل کلی پيوند 2 جدول بااستفاده از Select 2 سطحی به صورت زير است :
Select نام ستون های مورد نظر برای نمايش از جدول بيرونی
From نام جدول 1
Where نام فيلد مشترک 2 جدول IN ( Select نام فيلد مشترک 2 جدول
From نام جدول 2
Where شرط ها ... ) ;
مثال های قسمت های قبل پيوند جدول ها را با استفاده از Select های تو در تو بازنويسی می کنيم .
مثال : نام و نام خانوادگی دانشجويانی را ارائه دهيد که در ترم 1 سال تحصيلی 85 - 86 ، درس با کد 1012 را انتخاب کرده اند :
Select Name , Family
From Students
Where Student ID IN ( Select Student ID
From Selection
Where Course ID = 1012 AND Term = 1 AND Year = ' 85 - 86 ' ) ; |
|
نکته : تفاوت اين حالت با مثال های قبلی در اين است که ستون های نمايش داده شده فقط از يک جدول ( جدول Select بيرونی ) نمايش داده می شوند .
مثال : نام دروسی را ارائه دهيد که دانشجو با شماره دانشجويي 10254861 انتخاب کرده است :
Select Coures ID , CoTitle
From Courses
Where Course ID IN ( Select Course ID
From Selection
Where Student ID = 10254861 ) ; |
1011 |
پايگاه داده |
1013 |
زبان تخصصی |
|
Select های 3 سطحی :
در اين حالت 3 دستور Select به صورت تو در تو تعريف شده اند و برای پيوند 3 جدول به صورت 2 به 2 و با استفاده از فيلد های مشترک استفاده می شود . نتايج خروجی فقط می تواند شامل ستون هايي از بيرونی ترين Select تعريف شده باشد . در اين حالت از جدول دوم برای پيوند جدول های 1 و 3 استفاده می شود .
شکل کلی پيوند 3 جدول با استفاده از Select های 3 سطحی به صورت زير است :
Select نام ستون های مورد نظر جهت نمايش از جدول 1
From نام جدول 1
where نام فيلد مشترک جدول 1 و 2 IN ( Select نام فيلد مشترک جدول 1 و2
From نام جدول 2
Where نام فيلد مشترک جدول 2 و 3 IN ( Select نام فيلد مشترک جدول 2 و 3
From نام جدول 3
Where بقيه شرط ها ... )) ;
مثال : نام و نام خانوادگی دانشجويانی را ارائه دهيد که حداقل يک درس از نوع نظری را انتخاب کرده باشد :
Select Name , Family
From Students
where Student ID IN ( Select Student ID
From Selection
Where Course ID IN ( Select Course ID
From Courses
Where CoType = ' نظری ' )) ; |
Zahra |
Hosini |
Sahar |
Ahamadi |
Hesam |
Razavi |
|
|
امتیاز مطلب : 3
|
تعداد امتیازدهندگان : 1
|
مجموع امتیاز : 1